package aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

//con esto spring lo levanta desde el applicationContext.xml
@Aspect
public class UnAspecto {
	//no funciona con los metodos privados
	@Before("execution(private * model.Wasd.*(..))")
	public void metodosPrivados(){
		System.err.println("se ejecuto un metodo privado");
	}
	
	//todos los metodos publicos
	@Before("execution(public * model.Wasd.*(..))")
	public void metodosPublicos(){
		System.err.println("se ejecuto un metodo publico");
	}
	
	//un metodo especifico
	@Before("execution(* model.Wasd.hacerAlgo(..))")
	public void metodosHacerAlgo(){
		System.err.println("Se ejecuto hacerAlgo");
	}

	//metodos con parametros (solo pointcut
	@Pointcut("execution(* *(String)) "
			+ "&& args(str)")
	public void conArgumento(String str){}

	//antes del pointcut
	@Before("conArgumento(str)")
	public void audit(JoinPoint jp, String str) {
		System.err.println("Operacion = "
		+ jp.getSignature().getName()
		+ " parametro = " + str);
	}
}